from pydantic import BaseModel
from datetime import datetime
from typing import List, Optional, Literal
# 聊天消息基础模型
class ChatMessageBase(BaseModel):
    content: str
    role: Literal["user", "ai", "system"]  # 限制角色只能是这三个值
# 创建消息时使用
class ChatMessageCreate(ChatMessageBase):
    pass
# 数据库模型映射
class ChatMessageInDBBase(ChatMessageBase):
    id: int
    session_id: int
    message_id: Optional[str] = None
    created_at: datetime
    class Config:
        from_attributes = True
# 返回给客户端的消息模型
class ChatMessage(ChatMessageInDBBase):
    pass

# 聊天会话基础模型
class ChatSessionBase(BaseModel):
    name: str
    description: Optional[str] = None

# 创建会话时使用
class ChatSessionCreate(ChatSessionBase):
    pass

# 更新会话时使用
class ChatSessionUpdate(BaseModel):
    name: Optional[str] = None
    description: Optional[str] = None

# 数据库模型映射
class ChatSessionInDBBase(ChatSessionBase):
    id: int
    user_id: int
    created_at: datetime
    updated_at: Optional[datetime] = None

    class Config:
        from_attributes = True

# 返回给客户端的会话模型（包含消息列表）
class ChatSession(ChatSessionInDBBase):
    messages: List[ChatMessage] = []

# 聊天请求模型
class ChatRequest(BaseModel):
    session_id: Optional[int] = None  # 可选，没有则创建新会话
    message: str  # 用户消息内容
    session_name: Optional[str] = "新会话"  # 新会话名称
